import request from "@/utils/request";

const USER_BASE_URL = "/core/tStockDetailLocation";

const productInfoAPI = {
  /**
   * 获取当前登录用户信息
   *
   * @returns 登录用户昵称、头像信息，包括角色和权限
   */
  getInfo() {
    return request<any, UserInfo>({
      url: `${USER_BASE_URL}/me`,
      method: "get",
    });
  },

  /**
   * 库存查询-库存
   *
   * @param queryParams 查询参数
   */
  getPage(queryParams: productInfoPageQuery) {
    let query = encodeURIComponent(JSON.stringify({ ...queryParams }));
    return request<any, PageResult<productInfoPageVO[]>>({
      url: `/core/product/getProductList?object=${query}`,
      method: "get",
    });
  },

  getTypePage(queryParams: productInfoPageQuery) {
    let query = encodeURIComponent(JSON.stringify({ ...queryParams }));
    return request<any, PageResult<productInfoPageVO[]>>({
      url: `/core/product/category/getProductCategoryList?object=${query}`,
      method: "get",
    });
  },

  getProcedure(queryParams: productInfoPageQuery) {
    let query = encodeURIComponent(JSON.stringify({ ...queryParams }));
    return request<any, PageResult<productInfoPageVO[]>>({
      url: `/core/process/getProcessList?object=${query}`,
      method: "get",
    });
  },

  getRowList(queryParams: any) {
    return request<any, PageResult<productInfoPageVO[]>>({
      url: `/core/product/getProductBorByProductId?id=${queryParams}`,
      method: "get",
    });
  },

  /**
   * 库存查询-库存total
   *
   * @param queryParams 查询参数
   */
  getTotal(queryParams: productInfoPageQuery) {
    let query = encodeURIComponent(JSON.stringify({ ...queryParams }));
    return request<any, totalVO>({
      url: `/core/tStockHead/getTStockDetailTotal?object=${query}`,
      method: "get",
    });
  },

  /**
   * 获取用户表单详情
   *
   * @param userId 用户ID
   * @returns 用户表单详情
   */
  getFormData(userId: number) {
    return request<any, UserForm>({
      url: `${USER_BASE_URL}/${userId}/form`,
      method: "get",
    });
  },

  //新增/修改提交
  submitDialog(data: any) {
    return request({
      url: `/core/product/saveOrUpdateProduct`,
      method: "post",
      data: data,
    });
  },
  submitRowDialog(data: any) {
    return request({
      url: `/core/product/saveOrUpdateProductBor`,
      method: "post",
      data: data,
    });
  },
  //拖拽
  drag(data: any) {
    return request({
      url: `/core/product/updateProductBorSort`,
      method: "post",
      data: data,
    });
  },
  //删除
  delDialog(data: any) {
    return request({
      url: `/core/product/deleteProduct`,
      method: "post",
      data: data,
    });
  },

  delrowDialog(data: any) {
    return request({
      url: `/core/product/deleteProductBor`,
      method: "post",
      data: data,
    });
  },

  /**
   * 修改用户
   *
   * @param id 用户ID
   * @param data 用户表单数据
   */
  update(id: number, data: UserForm) {
    return request({
      url: `${USER_BASE_URL}/${id}`,
      method: "put",
      data: data,
    });
  },

  /**
   * 修改用户密码
   *
   * @param id 用户ID
   * @param password 新密码
   */
  resetPassword(id: number, password: string) {
    return request({
      url: `${USER_BASE_URL}/${id}/password/reset`,
      method: "put",
      params: { password: password },
    });
  },

  /**
   * 批量删除用户，多个以英文逗号(,)分割
   *
   * @param ids 用户ID字符串，多个以英文逗号(,)分割
   */
  deleteByIds(ids: string) {
    return request({
      url: `${USER_BASE_URL}/${ids}`,
      method: "delete",
    });
  },

  /** 下载用户导入模板 */
  downloadTemplate() {
    return request({
      url: `${USER_BASE_URL}/template`,
      method: "get",
      responseType: "blob",
    });
  },

  /**
   * 导出用户
   *
   * @param queryParams 查询参数
   */
  export(queryParams: productInfoPageQuery) {
    return request({
      url: `${USER_BASE_URL}/export`,
      method: "get",
      params: queryParams,
      responseType: "blob",
    });
  },

  /**
   * 导入用户
   *
   * @param deptId 部门ID
   * @param file 导入文件
   */
  import(deptId: number, file: File) {
    const formData = new FormData();
    formData.append("file", file);
    return request({
      url: `${USER_BASE_URL}/import`,
      method: "post",
      params: { deptId: deptId },
      data: formData,
      headers: {
        "Content-Type": "multipart/form-data",
      },
    });
  },

  /** 获取个人中心用户信息 */
  getProfile() {
    return request<any, UserProfileVO>({
      url: `${USER_BASE_URL}/profile`,
      method: "get",
    });
  },

  /** 修改个人中心用户信息 */
  updateProfile(data: UserProfileForm) {
    return request({
      url: `${USER_BASE_URL}/profile`,
      method: "put",
      data: data,
    });
  },

  /** 修改个人中心用户密码 */
  changePassword(data: PasswordChangeForm) {
    return request({
      url: `${USER_BASE_URL}/password`,
      method: "put",
      data: data,
    });
  },

  /**
   *   发送手机/邮箱验证码
   *
   * @param contact 联系方式  手机号/邮箱
   * @param contactType 联系方式类型 MOBILE:手机;EMAIL:邮箱
   */
  sendVerificationCode(contact: string, contactType: string) {
    return request({
      url: `${USER_BASE_URL}/send-verification-code`,
      method: "get",
      params: { contact: contact, contactType: contactType },
    });
  },

  /** 绑定个人中心用户手机 */
  bindMobile(data: MobileBindingForm) {
    return request({
      url: `${USER_BASE_URL}/mobile`,
      method: "put",
      data: data,
    });
  },

  /** 绑定个人中心用户邮箱 */
  bindEmail(data: EmailBindingForm) {
    return request({
      url: `${USER_BASE_URL}/email`,
      method: "put",
      data: data,
    });
  },

  /**
   *  获取用户下拉列表
   */
  getOptions() {
    return request<any, OptionType[]>({
      url: `${USER_BASE_URL}/options`,
      method: "get",
    });
  },
};

export default productInfoAPI;

/** 登录用户信息 */
export interface UserInfo {
  /** 用户ID */
  userId?: number;

  /** 用户名 */
  username?: string;

  /** 昵称 */
  nickname?: string;

  /** 头像URL */
  avatar?: string;

  /** 角色 */
  roles: string[];

  /** 权限 */
  perms: string[];
}

/**
 * 用户分页查询对象
 */
export interface productInfoPageQuery extends PageQuery {
  id?: number;
  /** 产品名称 */
  productName?: string;
  code?: string;
  /** 产品类别 */
  categoryCode?: string;

  /** 包装方式 */
  packageType?: string;

  /** 类型 */
  productType?: number;

  /** 长 */
  ctnL?: string;

  /** 宽 */
  ctnW?: string;

  /** 高 */
  ctnH?: string;

  /** 创建时间 */
  createTime?: string;
  labels?: Label[];
  categoryCodes?: string[];
}
interface Label {
  labelName?: string;
  labelValue?: string;
}

interface PageQuery {
  pageNum: number;
  pageSize: number;
}

/** 订单分页对象 */
export interface productInfoPageVO {
  /** 产品名称 */
  productName: string;
  /** 产品类别 */
  categoryName: string;
  /** 包装方式 */
  packageType: string;
  /** 长度（用于规格计算） */
  ctnL: number;
  /** 宽度（用于规格计算） */
  ctnW: number;
  /** 高度（用于规格计算） */
  ctnH: number;
  /** 单框容量（kg） */
  basketCapacity: number;
  /** 毛重（kg） */
  ctnGrossWeight: number;
  /** 净重（kg） */
  ctnNetWeight: number;
  /** 成本单价 */
  costPrice: number;
  /** 销售单价 */
  salesPrice: number;
  /** 最少订购数量（件） */
  minOrderQty: number;
  /** 安全库存数量（件） */
  safetyQty: number;
  /** 备注信息 */
  remark: string;
  expireDay: string; //保质期
  packageSize: string;
}
export interface productFormDialog {
  id?: string;
  code?: string;
  /** 产品名称 */
  productName?: string;
  /** 产品类别 */
  categoryCode?: string;
  /** 包装方式 */
  packageType?: string;
  // 规格
  packageSize?: string;
  expireDay?: number; //保质期
  unit?: string; //单位
  /** 单框容量（kg） */
  basketCapacity?: number;
  /** 毛重（kg） */
  ctnGrossWeight?: number;
  /** 净重（kg） */
  ctnNetWeight?: number;
  /** 成本单价 */
  costPrice?: number;
  /** 销售单价 */
  salesPrice?: number;
  /** 最少订购数量（件） */
  minOrderQty?: number;
  /** 安全库存数量（件） */
  safetyQty?: number;
  productType?: string; //类型
  warehouseCode?: string; //仓库类型
  remark?: string; //备注
  labels?: Label[]; //标签
  productImg?: string;
}
export interface productInfoRowPageVO {
  id: number;
  rowSeq: number;
  processName: string;
  sortSeq: number;
  prodTime: string | number; // 根据实际情况，这里可以是字符串或数字
  capacity: number;
  remark: string;
  createName: string;
  createTime: string | Date; // 根据实际情况，这里可以是字符串或 Date 对象
}

export interface totalVO {
  //总计
  qtyTotal?: number;
}

/** 用户表单类型 */
export interface UserForm {
  /** 用户头像 */
  avatar?: string;
  /** 部门ID */
  deptId?: number;
  /** 邮箱 */
  email?: string;
  /** 性别 */
  gender?: number;
  /** 用户ID */
  id?: number;
  /** 手机号 */
  mobile?: string;
  /** 昵称 */
  nickname?: string;
  /** 角色ID集合 */
  roleIds?: number[];
  /** 用户状态(1:正常;0:禁用) */
  status?: number;
  /** 用户名 */
  username?: string;
}

/** 个人中心用户信息 */
export interface UserProfileVO {
  /** 用户ID */
  id?: number;

  /** 用户名 */
  username?: string;

  /** 昵称 */
  nickname?: string;

  /** 头像URL */
  avatar?: string;

  /** 性别 */
  gender?: number;

  /** 手机号 */
  mobile?: string;

  /** 邮箱 */
  email?: string;

  /** 部门名称 */
  deptName?: string;

  /** 角色名称，多个使用英文逗号(,)分割 */
  roleNames?: string;

  /** 创建时间 */
  createTime?: Date;
}

/** 个人中心用户信息表单 */
export interface UserProfileForm {
  /** 用户ID */
  id?: number;

  /** 用户名 */
  username?: string;

  /** 昵称 */
  nickname?: string;

  /** 头像URL */
  avatar?: string;

  /** 性别 */
  gender?: number;

  /** 手机号 */
  mobile?: string;

  /** 邮箱 */
  email?: string;
}

/** 修改密码表单 */
export interface PasswordChangeForm {
  /** 原密码 */
  oldPassword?: string;
  /** 新密码 */
  newPassword?: string;
  /** 确认新密码 */
  confirmPassword?: string;
}

/** 修改手机表单 */
export interface MobileBindingForm {
  /** 手机号 */
  mobile?: string;
  /** 验证码 */
  code?: string;
}

/** 修改邮箱表单 */
export interface EmailBindingForm {
  /** 邮箱 */
  email?: string;
  /** 验证码 */
  code?: string;
}
